import { defineStore } from "pinia"
import tool from "@/utils/tool"

const defaultTag = [{ name: "dashboard", title: "仪表盘", path: "/dashboard", affix: true }]
const useTagStore = defineStore("tag", {
  state: () => ({
    tags: !tool.local.get("tags") || tool.local.get("tags").length === 0 ? defaultTag : tool.local.get("tags")
  }),

  getters: {
    getState() {
      return { ...this.$state }
    }
  },

  actions: {
    addTag(tag) {
      const target = this.tags.find((item) => item.path === tag.path)
      if (!target && tag.path) {
        this.tags.push(tag)
      }
      this.updateTagsToLocal()
    },

    removeTag(tag) {
      let index = 0
      this.tags.map((item, idx) => {
        if (item.path === tag.path && !item.affix) {
          if (this.tags[idx + 1]) {
            index = idx
          } else if (idx > 0) {
            index = idx - 1
          }
          this.tags.splice(idx, 1)
        }
      })
      this.updateTagsToLocal()
      return this.tags[index]
    },

    updateTag(tag) {
      this.tags.map((item) => {
        if (item.path == tag.path) {
          item = Object.assign(item, tag)
        }
      })
      this.updateTagsToLocal()
    },

    updateTagTitle(path, title) {
      this.tags.map((item) => {
        if (item.path == path) {
          item.customTitle = title
        }
      })
      this.updateTagsToLocal()
    },

    updateTagsToLocal() {
      tool.local.set("tags", this.tags)
    },

    clearTags() {
      this.tags = defaultTag
      tool.local.set("tags", defaultTag)
    }
  }
})

export default useTagStore
